真正的编译器必须处理许多文件，开发人员用主编译单元的名称来调用编译器。这个编译单元可以引用其他文件——例如，通过C语言中的\#include指令或Python或Modula-2中的import语句。导入的模块可以导入其他模块，以此类推。所有这些文件必须加载到内存中，并通过编译器的分析阶段运行。开发过程中，开发人员可能会犯语法或语义错误。当检测到错误时，应该打印一条错误消息，包括源代码行和一个标记，这个基本组成部分很重要。

幸运的是，LLVM提供了一个解决方案:LLVM::SourceMgr类。通过调用AddNewSourceBuffer()方法，一个新的源文件添加到SourceMgr中。或者，通过调用AddIncludeFile()方法来加载文件。这两种方法都返回一个标识缓冲区的ID。可以使用这个ID来取得一个指向相关文件的内存缓冲区的指针。要在文件中定义位置，可以使用llvm::SMLoc类。该类封装了一个指向缓冲区的指针，各种PrintMessage()方法允许向用户发送错误和其他信息消息。